export const validateUtils = {
    /**
     * 验证手机号格式
     * @param phone 手机号
     * @returns 是否有效
     */
    validatePhone: (phone: string): boolean => {
        const phoneRegex = /^1[3-9]\d{9}$/; // 中国大陆手机号正则
        return phoneRegex.test(phone);
    },

    /**
     * 验证邮箱格式
     * @param email 邮箱
     * @returns 是否有效
     */
    validateEmail: (email: string): boolean => {
        const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
        return emailRegex.test(email);
    },

    /**
     * 验证价格格式（正数，最多两位小数）
     * @param price 价格
     * @returns 是否有效
     */
    validatePrice: (price: number | string): boolean => {
        const priceRegex = /^\d+(\.\d{1,2})?$/;
        return priceRegex.test(String(price));
    },

    /**
     * 验证库存格式（非负整数）
     * @param stock 库存
     * @returns 是否有效
     */
    validateStock: (stock: number | string): boolean => {
        const stockRegex = /^\d+$/;
        return stockRegex.test(String(stock)) && Number(stock) >= 0;
    },

    /**
     * 验证是否为数字
     * @param value 值
     * @returns 是否有效
     */
    validateNumber: (value: number | string): boolean => {
        const numberRegex = /^-?\d+(\.\d+)?$/;
        return numberRegex.test(String(value));
    },

    /**
     * 验证是否为非负整数
     * @param value 值
     * @returns 是否有效
     */
    validateNonNegativeInteger: (value: number | string): boolean => {
        const integerRegex = /^\d+$/;
        return integerRegex.test(String(value)) && Number(value) >= 0;
    },

    /**
     * 验证URL格式
     * @param url URL
     * @returns 是否有效
     */
    validateUrl: (url: string): boolean => {
        const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
        return urlRegex.test(url);
    },

    /**
     * 验证身份证号格式（支持18位）
     * @param idCard 身份证号
     * @returns 是否有效
     */
    validateIdCard: (idCard: string): boolean => {
        const idCardRegex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/;
        return idCardRegex.test(idCard);
    },

    /**
     * 验证是否为有效的日期格式（YYYY-MM-DD）
     * @param date 日期
     * @returns 是否有效
     */
    validateDate: (date: string): boolean => {
        const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
        return dateRegex.test(date);
    },

    /**
     * 验证是否为有效的密码格式（至少8位，包含字母和数字）
     * @param password 密码
     * @returns 是否有效
     */
    validatePassword: (password: string): boolean => {
        const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
        return passwordRegex.test(password);
    },

    /**
     * 验证是否为有效的用户名格式（4-16位字母、数字或下划线）
     * @param username 用户名
     * @returns 是否有效
     */
    validateUsername: (username: string): boolean => {
        const usernameRegex = /^[a-zA-Z0-9_]{4,16}$/;
        return usernameRegex.test(username);
    },

    /**
     * 验证是否为有效的邮政编码（6位数字）
     * @param postalCode 邮政编码
     * @returns 是否有效
     */
    validatePostalCode: (postalCode: string): boolean => {
        const postalCodeRegex = /^\d{6}$/;
        return postalCodeRegex.test(postalCode);
    },

    /**
     * 验证是否为有效的IP地址
     * @param ip IP地址
     * @returns 是否有效
     */
    validateIpAddress: (ip: string): boolean => {
        const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
        return ipRegex.test(ip);
    },

    /**
     * 验证名称格式（1-50个字符）
     * @param name 名称
     * @returns 是否有效
     */
    validateName: (name: string): boolean => {
        return name.length >= 1 && name.length <= 50;
    },

    /**
     * 验证分类ID格式（必须大于0）
     * @param categoryId 分类ID
     * @returns 是否有效
     */
    validateCategoryId: (categoryId: number): boolean => {
        return categoryId > 0;
    },
    /**
     * 验证餐厅ID格式（必须大于0）
     * @param restaurantId 餐厅ID
     * @returns 是否有效
     */
    validateRestaurantId: (restaurantId: number): boolean => {
        return restaurantId > 0;
    },
};